jetty作为可嵌入的组件使用有很大的灵活性,下面以一段代码来解释jetty工作流程和设计原理:
Server server = new Server(8080);
 
        ResourceHandler resource_handler=new ResourceHandler()
        {
            protected void doDirectory(HttpServletRequest request, HttpServletResponse response,
                                                                  Resource resource) throws IOException
            {
                String listing=resource.getListHTML(request.getRequestURI(),
                                                               request.getPathInfo().lastIndexOf("/")>0);
                response.setContentType("text/html; charset=UTF-8");
                response.getWriter().println(listing);
            }
        };
 
        resource_handler.setResourceBase(".");
 
        HandlerList handlers = new HandlerList();
        handlers.setHandlers(new Handler[]{resource_handler,new DefaultHandler()});
        server.setHandler(handlers);
 
        server.start();
        server.join();
类 org.mortbay.jetty.Server 实现了四个接口:
  • org.mortbay.component.LifeCycle
  • org.mortbay.jetty.Handler
  • org.mortbay.jetty.HandlerContainer
  • org.mortbay.util.Attributes
其 中接口 org.mortbay.component.LifeCycle 定义了一个类的生命周期,提供启动,关闭,判断处于哪个生命阶段的功能,是 Server,Connector,Handler,HandlerContainer,Attributes等所有需要启动,关闭的接口或类的根。
下面是类层次结构图:
3193615085761060505.jpg
jetty服务启动的顺序如图:
3401062143595203035.jpg
Server启动时做了以下工作:
  1. 初始化并启动UserRealm(用于Jetty安全管理)。
  2. 初始化并启动SessionIdManager(HttpSession管理器)。
  3. 初始化并启动ThreadPool(线程池)。
  4. 初始化并启动Handler(处理来自浏览器的请求)。
  5. 初始化并启动Connector(连接器,用于监听并接收来自浏览器的请求)。